﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Windows.Forms;

namespace Arthus
{
    class FST
    {
        MySqlConnection konekcija;
        MySqlCommand komanda = new MySqlCommand();
        MySqlDataReader datareader = null;
        MySqlDataAdapter adapter = null;
        DataSet dataset = null;
        DataTable dataTable = null;

        FST fstObjekat = null;
        Partneri partnerObjekat = null;
        Konto kontoObjekat = null;
        Posjed posjedObjekat = null;

        public int VratiPovecanID()
        {
            int rezultat = 0;
            try
            {
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT MAX(FSTID) FROM FST;";
                datareader = komanda.ExecuteReader();
                datareader.Read();
                rezultat = Convert.ToInt32(datareader.GetValue(0));
                rezultat++;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }

        public void UbaciUFSTKnjizenje(int idFIN, string konto, int idPartnera, String dokument, String opis, String veza, DateTimePicker datumKnjizenja,
            decimal duguje, decimal potrazuje, int posjed, bool dokumentFIN, string datumDokumenta, string datumDospeca)
        {
            try
            {
                fstObjekat = new FST();
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                if (dokumentFIN)
                {
                    if (!datumDokumenta.Equals("NULL") && !datumDospeca.Equals("NULL"))
                    {
                        komanda.CommandText = string.Format("INSERT INTO FST(FSTID, FSTFIN, FSTKON, FSTPAR, FSTDOK, FSTOPI, FSTOZS, FSTDDO, FSTDPO, FSTDSP, FSTDUG, FSTPOT, FSTPJE,"
                            + " FSTWIB, FSTVAL, FSTIIM, FSTIDT) VALUES (" + fstObjekat.VratiPovecanID() + ", " + idFIN + ", '" + konto + "', " + idPartnera + ", '"
                            + dokument + "', '" + dokument + " " + opis + "', '" + veza + "', '" + datumKnjizenja.Value.Date.ToString("yyyy-MM-dd") + "', '" +
                            datumDokumenta + "', '" + datumDospeca + "', " + duguje + ", " + potrazuje + ", " + posjed + ", 0, 0, 'Agrovin', NOW())");
                    }
                    else 
                    {
                        komanda.CommandText = string.Format("INSERT INTO FST(FSTID, FSTFIN, FSTKON, FSTPAR, FSTDOK, FSTOPI, FSTOZS, FSTDDO, FSTDPO, FSTDSP, FSTDUG, FSTPOT, FSTPJE,"
                                + " FSTWIB, FSTVAL, FSTIIM, FSTIDT) VALUES (" + fstObjekat.VratiPovecanID() + ", " + idFIN + ", '" + konto + "', " + idPartnera + ", '"
                                + dokument + "', '" + dokument + " " + opis + "', '" + veza + "', '" + datumKnjizenja.Value.Date.ToString("yyyy-MM-dd") + "', " +
                                datumDokumenta + ", " + datumDospeca + ", " + duguje + ", " + potrazuje + ", " + posjed + ", 0, 0, 'Agrovin', NOW())");
                    }
                }
                else
                {
                    if (!datumDokumenta.Equals("NULL") && !datumDospeca.Equals("NULL"))
                    {
                        komanda.CommandText = string.Format("INSERT INTO FST(FSTID, FSTFIN, FSTKON, FSTPAR, FSTDOK, FSTOPI, FSTOZS, FSTDDO, FSTDPO, FSTDSP, FSTDUG, FSTPOT, FSTPJE,"
                            + " FSTWIB, FSTVAL, FSTIIM, FSTIDT) VALUES (" + fstObjekat.VratiPovecanID() + ", " + idFIN + ", '" + konto + "', " + idPartnera + ", '"
                            + dokument + "', '" + opis + "', '" + veza + "', '" + datumKnjizenja.Value.Date.ToString("yyyy-MM-dd") + "', '" + datumDokumenta + "', '" + datumDospeca + "', "
                            + duguje + ", " + potrazuje + ", " + posjed + ", 0, 0, 'Agrovin', NOW())");
                    }
                    else 
                    {
                        komanda.CommandText = string.Format("INSERT INTO FST(FSTID, FSTFIN, FSTKON, FSTPAR, FSTDOK, FSTOPI, FSTOZS, FSTDDO, FSTDPO, FSTDSP, FSTDUG, FSTPOT, FSTPJE,"
                                + " FSTWIB, FSTVAL, FSTIIM, FSTIDT) VALUES (" + fstObjekat.VratiPovecanID() + ", " + idFIN + ", '" + konto + "', " + idPartnera + ", '"
                                + dokument + "', '" + opis + "', '" + veza + "', '" + datumKnjizenja.Value.Date.ToString("yyyy-MM-dd") + "', " + datumDokumenta + ", " + datumDospeca + ", "
                                + duguje + ", " + potrazuje + ", " + posjed + ", 0, 0, 'Agrovin', NOW())");
                    }
                }
                int response = komanda.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public void ObrisiFSTPremaFINid(int finID) {
            try
            {
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "DELETE FROM FST WHERE FSTFIN=" + finID + ";";
                komanda.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public decimal vratiDugujeNaOsnovuFINID(int finId) {
            decimal rezultat = 0.00m;
                try
                {
                    //konekcija sa bazom
                    konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                    konekcija.Open();
                    komanda.Connection = konekcija;
                    komanda.CommandType = CommandType.Text;
                    komanda.CommandText = "SELECT SUM(FSTDUG) FROM FST WHERE FSTFIN=" + finId + ";";
                    datareader = komanda.ExecuteReader();
                    datareader.Read();
                    rezultat = Convert.ToDecimal(datareader.GetValue(0));
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
                }
                finally
                {
                    datareader.Close();
                    konekcija.Close();
                }
            return rezultat;
        }
        public decimal vratiPotrazujeNaOsnovuFINID(int finId)
        {
            decimal rezultat = 0.00m;
                try
                {
                    //konekcija sa bazom
                    konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                    konekcija.Open();
                    komanda.Connection = konekcija;
                    komanda.CommandType = CommandType.Text;
                    komanda.CommandText = "SELECT SUM(FSTPOT) FROM FST WHERE FSTFIN=" + finId + ";";
                    datareader = komanda.ExecuteReader();
                    datareader.Read();
                    rezultat = Convert.ToDecimal(datareader.GetValue(0));
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
                }
                finally
                {
                    datareader.Close();
                    konekcija.Close();
            }
            return rezultat;
        }

        public void PopuniGridViewZaDatumKnjizenja(String finID, DataGridView zaDatumKnjizenja) {
            if (finID.Length > 0)
            {
                try
                {
                    partnerObjekat=new Partneri();
                    //ciscenje i spremanje datagridview-a
                    zaDatumKnjizenja.DataSource = null;
                    zaDatumKnjizenja.Rows.Clear();
                    zaDatumKnjizenja.Refresh();

                    //promenljiva za punjenje rednog broja dataGrid-a
                    int redniBroj = 0;
                    //konekcija sa bazom i punjenje datatable-a
                    konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                    komanda.Connection = konekcija;
                    komanda.CommandText = "SELECT FSTID, FSTKON, FSTPAR, FSTDOK, DATE_FORMAT(FSTDDO,'%d.%m.%Y.'), FSTDUG, FSTPOT, FSTOPI FROM FST WHERE FSTFIN="
                        +Convert.ToInt32(finID)+";";
                    dataTable = new DataTable();
                    adapter = new MySqlDataAdapter();
                    adapter.SelectCommand = komanda;
                    adapter.Fill(dataTable);

                    adapter.Dispose();
                    konekcija.Close();

                    for (int i = 0; i < dataTable.Rows.Count; i++)
                    {
                        redniBroj++;
                        zaDatumKnjizenja.Rows.Add(redniBroj, dataTable.Rows[i][0], dataTable.Rows[i][1],
                            partnerObjekat.VratiOznakuPartneraNaOsnovuID((int)dataTable.Rows[i][2]), dataTable.Rows[i][3], (String)dataTable.Rows[i][4], dataTable.Rows[i][5],
                            dataTable.Rows[i][6], dataTable.Rows[i][7]);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
                }
                finally
                {
                    dataTable.Clear();
                    adapter.Dispose();
                    konekcija.Close();
                }
            }
        }

        public void PopuniKontroleUstavkaFINNalogaForma(int fstID, ComboBox izborKonta, ComboBox prodajnaJedinica, TextBox dokument, DateTimePicker datumDokumenta, 
            DateTimePicker datumDPO, DateTimePicker datumDospeca, TextBox opisKnjizenja, TextBox veza, TextBox duguje, TextBox potrazuje) {
            try
            {
                kontoObjekat = new Konto();
                posjedObjekat=new Posjed();
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT FSTKON, FSTPJE, FSTDOK, FSTDDO,FSTOPI, FSTOZS, FSTDUG, FSTPOT FROM FST WHERE FSTID="+fstID+";";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    izborKonta.SelectedIndex = izborKonta.Items.IndexOf(datareader["FSTKON"].ToString() + " " 
                        + kontoObjekat.VratiNazivKontaNaOsnovuOznake(datareader["FSTKON"].ToString()));
                    if (datareader["FSTPJE"].ToString().Equals("0"))
                    {
                        prodajnaJedinica.SelectedIndex = 0;
                    }
                    else { 
                    prodajnaJedinica.SelectedIndex=prodajnaJedinica.Items.IndexOf(posjedObjekat.VratiOznakuPosjedaNaOsnovuID(Convert.ToInt32(datareader["FSTPJE"].ToString())));
                    }
                    dokument.Text = datareader["FSTDOK"].ToString();
                    datumDokumenta.Text = datareader["FSTDDO"].ToString();
                    datumDPO.Text = datareader["FSTDDO"].ToString();
                    datumDospeca.Text = datareader["FSTDDO"].ToString();
                    opisKnjizenja.Text = datareader["FSTOPI"].ToString();
                    veza.Text = datareader["FSTOZS"].ToString();
                    duguje.Text = datareader["FSTDUG"].ToString();
                    potrazuje.Text = datareader["FSTPOT"].ToString();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
                
        }
    }
}
